<?php
/*
 * @category 	/
 * @author 		Sung Hoon, Cho (akdddnet@gmail.com)
 * @since		2011. 1. 3.
 * @license		BSD License
 * @version		0.1
 * 
 * 주소 체계 설명
 * / 					: ROOT
 * /modulename			: Controller 명.
 * /modulename/method	: Controller안에 호출 될 함수명.
 * 
 * 예) http://test.com/test/main/가나다/라마바사아/으이익.
 * 호출되는 Controller : TestController
 * 
 * https://github.com/utumdol/phpworks/wiki/ 를 참고해서 만들었습니다. (말이 참고지.. 거의 그대로 배낌 -_-);; 
 */
 
	require_once __DIR__."/__web-inf/config.php";
	global $CFG;
	## routing ##
	$path = ClassSupport::getRouterURL();
	ClassSupport::setAdminPath($CFG->PATH->ADMIN);
	
	$path_count = count($path);
	
	// controller, method 정의.
	$module_name = DEFAULT_MODULE_NAME;
	$controller_name = DEFAULT_CONTROLLER_NAME;
	$method_name = DEFAULT_METHOD_NAME;
	$slice = 3;	// 일반, 관리자 일 경우 path을 자르는 위치가 달라짐.
	$is_admin_path = false;
	
	// template 기본 설정.
	$tpl = new Template("default");
	$tpl->define(array('main'=>"_index.html", "menu"=>"_menu.html"));
	
	require_once $CFG->CLASSES_DIR."/_base/filter/LoginFilter.php";
	$login_filter = new LoginFilter();
	
	// 모든 페이지.. 로그인 필요.
	if($login_filter->doFilter()) {
		if($path_count == 2) {
			$method_name = $path[1];
		} else if($path_count >= 3) {
			// 관리자 페이지 일 경우.
			// 도메인/admin/member/list 관리자는 무조건 3개 이상이 됨.
			if(ClassSupport::isAdminPath()) {
				$slice = 4;
					
				$module_name = $path[2];
				$controller_name = ucwords($module_name);
				$method_name = $path[3];
					
				if(Common::isNullOrEmpty($method_name)) {
					$method_name = DEFAULT_METHOD_NAME;
				}
					
					
				// 관리자 전용 template_ 설정.
				$tpl = new Template("default/admin");
				$tpl->define(array('main'=>"../_index.html", "menu"=>"../_menu.html"));
					
				$is_admin_path = true;
					
			} else {
				$module_name = $path[1];
				$controller_name = ucwords($module_name);
				$method_name = $path[2];
			}
		}
		// Controller 접미어 붙여주기~
		$controller_name .= "Controller";
		
		ClassSupport::getClassLoad($controller_name, $CFG->CLASS_DIR);
		$controller = new $controller_name;
		
		// start 함수가 존재할 경우 실행시킴.
		if(method_exists($controller, "start")) {
			call_user_func_array(array(&$controller, "start"), array());
		}
		
		// 아래 call_user_func_array 보다 위에 존재해야됩니다.
		// 상황에 따라서 body값을 변경해야되는 경우가 발생하는데 call_user_func_array보다 아래에 있으면 값을 변경할수가 없음.
		$tpl->define(array("body"=>strtolower($module_name)."/".strtolower($method_name).".html"));
		
		// 호출된 모듈 및 메소드 정보 전달.
		$call_info = new stdClass;
		$call_info->module = strtolower($module_name);
		$call_info->method = strtolower($method_name);
		$call_info->admin = $is_admin_path;
		$CFG->CALL_INFO = $call_info;
		
		/*
		 if( strpos($call_info->method, '_view') !== FALSE )
		$call_info->method = strtolower(str_replace("_view", "", $call_info->method));
		*/
		/*
		 // 페이지 접근 할때마다 현재 페이지 정보 가져오기
		require_once $CFG->CLASSES_DIR."/default/DefaultDao.php";
		$dao = new DefaultDao($CFG->mysql);
		$menuinfo = $dao->getMenu($call_info->module, $call_info->method);
		//Common::print_r($menuinfo);
		// DB정보가 존재할 경우.
		$pcwww = $CFG->PCWWW;
		$title = "";
		$subtitle2 = "";
		if(!Common::isNullOrEmpty($menuinfo->menu_info)) {
		$pcwww = $menuinfo->menu_info->s_pcurl;
		$title = $menuinfo->menu_info->m_name;
		$title2 = $menuinfo->menu_info->s_name2;
		}
		*/

		// 메뉴 관련 Class 불러오기
		require_once $CFG->CLASSES_DIR."/_base/MenuPrivilege.php";
		$menuinfo = MenuPrivilege::getInstance()->getMenu();
		
		// 중요한 정보들이 CFG에 많이 담겨 있기 때문에... 통채로 CFG를 넘기지 마세요~
		// 필요한 항목 추가 해서 사용하면됨
		$min_cfg = new stdClass;
		$min_cfg->PATH = $CFG->PATH;			// 경로 관련설정값
		$min_cfg->CALL_INFO = $call_info;		// 호출 정보값
		
		if(!Common::isNullOrEmpty($_SESSION["owner"])) {
			$user = new stdClass;
			$user->name = $_SESSION["owner"]->m_name;
			$user->id = $_SESSION["owner"]->m_id;
			$user->email = $_SESSION["owner"]->m_email;
			$user->photo = $_SESSION["owner"]->m_photo;
		
			$min_cfg->USER = $user;
		}
		
		$tpl->assign(array(
				 "CFG"=>$min_cfg
				,"menuinfo"=>$menuinfo
		));
		
		// http://kr2.php.net/manual/en/function.call-user-func-array.php 정독 하세요!!
		call_user_func_array(array($controller, $method_name), array_slice($path, $slice));
		
		// ajax로 요청한 경우...
		if(Common::isAjax()) {
			
			// menulist는 tpl의 main값을 변경하면 안됨.
			if(strcmp($CFG->CALL_INFO->method, strtolower('externalMenuList'))) {
				
				// ajax로 호출이 될 경우에는 main값이 필요없고 곧바로 body가 출력이 되면 됨.
				// 관리자 폴더는 tpl 생성할때 폴더를 지정하기 때문에 따로 설정하지 않아도 됨.
				//$tpl->define(array('main'=>$CFG->CALL_INFO->module."/".$CFG->CALL_INFO->method.".html"));
				$tpl->define(array('main'=>$tpl->tpl_['body'][1]));
			}
		}
		
		// template_ print 하기전에 실행되어야 함.
		$controller->_destructor();
		
		$tpl->print_("main");
	}